<?php
use frontend\modules\yii2\widgets\layouts\markdown\Markdown;
/* @var $this \yii\web\View */
$this->title = 'Request组件的学习和使用-Components组件';
$this->registerMetaTag([
    'name' => 'keywords',
    'content' => 'request,yii,yii2,框架,应用组件,Components,使用,教程'
]);
$this->registerMetaTag([
    'name' => 'description',
    'content' => 'Request组件负责接收请求并给处理请求的客户端功能提供必要的基础设施。'
]);

$html = [
    "概述" => <<<HTML
# Request组件的使用
Request组件负责接收请求并给处理请求的客户端功能提供必要的基础设施。当Yii收到请求后，会实例化一个对象`yii\web\Request`，这个对象中会包含请求的所有信息。

HTML,
    "config" => <<<HTML
## 配置举例 id=config
```php
[
    'components' => [
        'request' => [            
            'csrfParam' => '_mycsrf',
        ]
    ],
]
```

HTML,

    "url" => <<<HTML
## 获取Url id=url
`Request`组件提供了各种获取url的方法，我们以如下url为例讲解这些方法：
```shell
http://example.com/admin/index.php/product?id=100
```
- `url`：返回 /admin/index.php/product?id=100, 此 URL 不包括主机信息部分。
- `absoluteUrl`：返回 http://example.com/admin/index.php/product?id=100, 包含host infode的整个URL。
- `hostInfo`：返回 http://example.com, 只有主机信息部分。
- `pathInfo`：返回 /product， 这个是入口脚本之后，问号之前（查询字符串）的部分。
- `queryString`：返回 id=100，问号之后的部分。
- `baseUrl`：返回 /admin，主机信息之后， 入口脚本之前的部分。
- `scriptUrl`：返回 /admin/index.php，没有路径信息和查询字符串部分。
- `serverName`：返回 example.com，URL 中的主机名。
- `serverPort`：返回 80，这是 web 服务中使用的端口。

使用方法如下：
```php
echo Yii::\$app->request->url;

echo Yii::\$app->request->absoluteUrl;
```

HTML,
    "param" => <<<HTML
## 获取数据 id=params
这应该是`request`组件最基本和最重要的功能了，我们可以通过如下代码来获取请求数据：
```php
// 等价于: \$params = \$_GET;
\$params = Yii::\$app->request->get();

// 等价于: \$params = \$_POST;
\$params = Yii::\$app->request->post();
```
虽然和传统的PHP数据获取方式等价，但是却优于传统，当你企图获取不存在的元素时，Yii提供了默认值：
```php
// 等价于: \$id = isset(\$_GET['id']) ? \$_GET['id'] : 1;
\$id = Yii::\$app->request->get('id', 1);
```
如果没有提供默认值而数据又不存在时，会返回null。  

我们通常会用到`GET`和`POST`方式提交数据，但是在`Restful API`中还会使用`DELETE`、`PUT`、`OPTIONS`，而作为服务端，我们在处理数据的时候经常希望能够用一种通用的方法获取数据，Yii也提供了这种方法：
```php
// 无论用哪种方法提交数据，都可以使用如下代码获取数据
Yii::\$app->request->bodyParams;

// 返回key为id的值
\$id = Yii::\$app->request->bodyParams("id");
```
HTML,
    "ip" => <<<HTML
## 获取IP id=ip
```php
// 输出：172.18.0.1
echo Yii::\$app->request->getUserHost();
```
HTML,
    "port" => <<<HTML
## 获取端口号Post id=port
```php
// 输出：80
echo Yii::\$app->request->getPort();
```
HTML,
    "" => <<<HTML

HTML,
];


//var_dump(Yii::$app->request->getCookies());
////
//die;

echo Markdown::widget(["content" => implode("\n", $html)]);



